﻿create database NHACUNGCAP
GO
USE NHACUNGCAP
GO
CREATE TABLE TAILIEUDIENTU
(
	MaTaiLieu INT IDENTITY PRIMARY KEY,
	TenTaiLieu NVARCHAR(100),
	MaLoaiTaiLieu INT,
	TacGia NVARCHAR(100),
	NamXuatBan DATETIME,
	DungLuong NVARCHAR(20),
	DuongDan NVARCHAR(250),
	DonGia FLOAT,
	SoLuongTon INT,
	NgayThem DATETIME
)
GO
CREATE TABLE LOAITAILIEU
(
	MaLoaiTaiLieu INT IDENTITY PRIMARY KEY,
	TenLoaiTaiLieu NVARCHAR(100)
)
GO
CREATE TABLE HETHONGBANLE
(
	MaHeThong INT IDENTITY PRIMARY KEY,
	TenHeThong NVARCHAR(100),
	DiaChi NVARCHAR(100),
	DienThoai VARCHAR(10),
	NguoiLienHe NVARCHAR(100),
	TenDangNhap NVARCHAR(30)
)
GO
CREATE TABLE LICHSUGIAODICH
(
	MaHeThong INT,
	MaTaiLieu INT,
	SoLuong INT,
	DonGia FLOAT,
	TongTien FLOAT,
	PRIMARY KEY (MaHeThong,MaTaiLieu) 
)
GO
CREATE TABLE NGUOIDUNG
(
	TenDangNhap NVARCHAR(30) PRIMARY KEY,
	MatKhau NVARCHAR(30),
	MaQuyen INT
)
GO
CREATE TABLE QUYENHAN
(
	MaQuyen INT IDENTITY PRIMARY KEY,
	TenQuyen NVARCHAR(100)
)
GO

-- ADD FOREIGN KEYS TO THE TABLES
ALTER TABLE HETHONGBANLE ADD CONSTRAINT FK_HETHONGBANLE_NGUOIDUNG FOREIGN KEY (TenDangNhap) REFERENCES NGUOIDUNG(TenDangNhap)
ALTER TABLE NGUOIDUNG ADD CONSTRAINT FK_NGUOIDUNG_QUYENHAN FOREIGN KEY (MaQuyen) REFERENCES QUYENHAN(MaQuyen)
ALTER TABLE LICHSUGIAODICH ADD CONSTRAINT FK_LICHSUGIAODICH_HETHONGBANLE FOREIGN KEY (MaHeThong) REFERENCES HETHONGBANLE(MaHeThong)
ALTER TABLE LICHSUGIAODICH ADD CONSTRAINT FK_LICHSUGIAODICH_TAILIEUDIENTU FOREIGN KEY (MaTaiLieu) REFERENCES TAILIEUDIENTU(MaTaiLieu)
ALTER TABLE TAILIEUDIENTU ADD CONSTRAINT FK_TAILIEUDIENTU_LOAITAILIEU FOREIGN KEY (MaLoaiTaiLieu) REFERENCES LOAITAILIEU(MaLoaiTaiLieu)

-- INSERT DATA INTO THE TABLES
INSERT INTO LOAITAILIEU(TenLoaiTaiLieu) VALUES(N'ebook')
INSERT INTO LOAITAILIEU(TenLoaiTaiLieu) VALUES(N'software')
INSERT INTO LOAITAILIEU(TenLoaiTaiLieu) VALUES(N'sách cuốn')

INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'Điện tử cơ bản 1',1,N'Nguyễn Văn Biên','01/01/2007',N'1.4MB',N'http://www.ebook.edu.vn/?page=1.6&view=1885',15000,10,'01/01/2007')
INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'Điện tử cơ bản 2',1,N'Nguyễn Trọng Hòa','01/01/2009',N'3.3MB',N'http://www.ebook.edu.vn/?page=1.6&view=9283',15000,10,'01/01/2007')
INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'Giáo trình-Bài giảng-Giáo án',1,N'Khoa CNTT','01/01/2011',N'912.2kB',N'http://www.ebook.edu.vn/?page=1.20&view=20474',45000,10,'01/01/2007')
INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'Lập trình Web',1,N'Lê Thanh Tâm','01/01/2008',N'2.5MB',N'http://www.ebook.edu.vn/?page=1.23&view=801',45000,10,'01/01/2007')
INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'Lập trình ASP',1,N'Khoa CNTT','01/01/2008',N'1.4MB',N'http://www.ebook.edu.vn/?page=1.26&view=2002',45000,10,'01/01/2007')
INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'Nghiên cứu và xây dựng thử nghiệm 3D Engine',1,N'Ngô Thái An - Nguyễn Đình Toàn','01/01/2011',N'2.0MB',N'http://www.ebook.edu.vn/?page=1.36&view=20803',45000,10,'01/01/2007')

INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'Phần mềm quản lý Nhà sách',2,N'Trungviet Software','01/01/2010',N'200MB',N'http://phanmem.asia/software/1_list_software.aspx',6500000,10,'01/01/2007')
INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'Phần mềm quản lý Đào tạo',2,N'Trungviet Software','01/01/2010',N'40MB',N'http://phanmem.asia/software/1_list_software.aspx',3500000,10,'01/01/2007')
INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'Phần mềm quản lý nhà thuốc GPP',2,N'Trungviet Software','01/01/2010',N'85MB',N'http://phanmem.asia/news/193_Phan_mem_quan_ly_nha_thuoc_GPP.aspx',4500000,10,'01/01/2007')
INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'ViOLET',2,N'Bạch Kim','01/01/2010',N'8.5MB',N'http://bachkim.vn/index.php?act=violet',2500000,10,'01/01/2007')
INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'mtd9 EVA for PC',2,N'công ty Lạc Việt','01/01/2012',N'4.5MB',N'http://www.lacviet.com.vn/mtd/chon-mua-tu-dien.aspx?msp=mtdEVA9_PC',85000,10,'01/01/2007')

INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'Nguồn gốc của loài người',3,N'G.N. Machusin','01/11/2011',N'1.5MB',N'http://vietlion.com/ebk/download-ebook-nguon-goc-cua-loai-nguoi.html',15000,1,'01/01/2007')
INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'Đời sống các loài chim',3,N'Võ Quý','01/11/2011',N'1.2MB',N'http://vietlion.com/ebk/download-ebook-doi-song-cac-loai-chim.html',15000,1,'01/01/2007')
INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'Chuyện vui vật lý',3,N'Tuấn Minh','01/11/2011',N'1.2MB',N'http://vietlion.com/ebk/download-ebook-chuyen-vui-vat-ly.html',15000,1,'01/01/2007')
INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'Các nhà tiên tri',3,N'Không rõ','01/11/2011',N'355KB',N'http://vietlion.com/ebk/download-ebook-cac-nha-tien-tri.html',5000,1,'01/01/2007')
INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem) VALUES (N'Con người và vũ trụ',3,N'Không rõ','01/11/2009',N'324KB',N'http://vietlion.com/ebk/download-ebook-con-nguoi-va-vu-tru.html',5000,1,'01/01/2007')

INSERT INTO QUYENHAN(TenQuyen) VALUES(N'Chỉ được xem online')
INSERT INTO QUYENHAN(TenQuyen) VALUES(N'Được phép xem và download')
INSERT INTO QUYENHAN(TenQuyen) VALUES(N'Được phép xem, download và xóa')
INSERT INTO QUYENHAN(TenQuyen) VALUES(N'Giải đáp thông tin cho khách hàng')

INSERT INTO NGUOIDUNG VALUES(N'KHCDN',N'111',1)
INSERT INTO NGUOIDUNG VALUES(N'KH',N'111',2)
INSERT INTO NGUOIDUNG VALUES(N'AD',N'111',3)
INSERT INTO NGUOIDUNG VALUES(N'HD',N'111',4)
INSERT INTO NGUOIDUNG VALUES(N'HD1',N'111',4)

INSERT INTO HETHONGBANLE(TenHeThong,DiaChi,DienThoai,NguoiLienHe,TenDangNhap) VALUES(N'HOSCO',N'32/4 Lê Lai, Phường 12, Quận Tân Bình',N'0902243822',N'NGUYEN NGOC LE',N'HD')
INSERT INTO HETHONGBANLE(TenHeThong,DiaChi,DienThoai,NguoiLienHe,TenDangNhap) VALUES(N'Vietbook',N'27 Phùng Khắc Khoan - Quận I, Thành phố Hồ Chí Minh',N'0938231670',N'NGUYEN NGOC LE',N'HD')


















--chay tung cau lenh PROC
--TAI LIEU DIEN TU
--cau 1

CREATE PROC [dbo].[UPDATE_TAILIEUDIENTU] @maTL int, @tenTL nvarchar(100) , @maLTL int  , @tacGia nvarchar(100), @namXB datetime, @dungL nvarchar(20), @duongD nvarchar(250), @donG float, @soLT int, @ngayT datetime
as
BEGIN TRAN
	If not exists(SELECT * FROM LOAITAILIEU AS LTL WHERE LTL.MaLoaiTaiLieu=@maLTL) OR @soLT<0
		BEGIN
			raiserror('Ma Tai Lieu Bi Trung', 0, 1)
			rollback
		END
	ELSE
		BEGIN  	
				UPDATE TAILIEUDIENTU
				SET TenTaiLieu=@tenTL, MaLoaiTaiLieu=@maLTL, TacGia=@tacGia, NamXuatBan=@namXB, DungLuong=@dungL, DuongDan=@duongD, DonGia=@donG, SoLuongTon=@soLT, NgayThem=@ngayT
				WHERE MaTaiLieu=@maTL
		END
COMMIT TRAN	
	

--cau 2
CREATE PROC [dbo].[INSERT_TAILIEUDIENTU] @tenTL nvarchar(100) , @maLTL int  , @tacGia nvarchar(100), @namXB datetime, @dungL nvarchar(20), @duongD nvarchar(250), @donG float, @soLT int, @ngayT datetime
as
begin tran 
	begin try
		Declare @maTL int
		INSERT INTO TAILIEUDIENTU(TenTaiLieu, MaLoaiTaiLieu, TacGia, NamXuatBan, DungLuong, DuongDan, DonGia, SoLuongTon, NgayThem)
		VALUES (@tenTL, @maLTL, @tacGia, @namXB, @dungL, @duongD, @donG, @soLT, @ngayT)
	end try
	begin catch
		raiserror('Lỗi: không thêm được TAILIEUDIENTU',0,1)
		rollback
	end catch
commit tran

--HE THONG BAN LE
--cau 3
CREATE PROC [dbo].[INSERT_HETHONGBANLE] @tenHT nvarchar(100), @diaC nvarchar(100), @dienT nvarchar(10), @nguoiLH nvarchar(100), @tenDN nvarchar(30)
as
begin tran 
	Declare @maHT int
	INSERT INTO HETHONGBANLE(TenHeThong, DiaChi, DienThoai, NguoiLienHe, TenDangNhap)
	VALUES (@tenHT, @diaC, @dienT, @nguoiLH, @tenDN)
	IF NOT EXISTS (SELECT * FROM NGUOIDUNG WHERE TenDangNhap=@tenDN)
	begin 
		raiserror('Lỗi: không thêm được HETHONGBANLE',0,1)
		rollback
	end 
commit tran

--cau 4
CREATE PROC [dbo].[UPDATE_HETHONGBANLE] @maHT int, @tenHT nvarchar(100) , @diaC nvarchar(100), @dienT nvarchar(10), @nguoiLH nvarchar(100), @tenDN nvarchar(30)
as
BEGIN TRAN  	
	UPDATE HETHONGBANLE
	SET TenHeThong=@tenHT, DiaChi=@diaC, DienThoai=@dienT, NguoiLienHe=@nguoiLH, TenDangNhap=@tenDN
	WHERE MaHeThong=@maHT
	If not exists(SELECT * FROM NGUOIDUNG AS ND WHERE ND.TenDangNhap=@tenDN)
		BEGIN
			raiserror('Ten dang nhap khong dung', 0, 1)
			rollback
		END	
COMMIT TRAN	
	

--NGUOI DUNG
--cau5
CREATE PROC [dbo].[INSERT_NGUOIDUNG] @tenDN nvarchar(30), @matK nvarchar(30), @maQ int
as
begin tran 
	IF NOT EXISTS (SELECT * FROM NGUOIDUNG WHERE TenDangNhap=@tenDN)
		begin 
			INSERT INTO NGUOIDUNG(TenDangNhap, MatKhau, MaQuyen)
			VALUES (@tenDN, @matK, @maQ)
		end 
	ELSE
		begin
			raiserror('Lỗi:tên đăng nhập đã tồn tại ',0,1)
			rollback
		end	
commit tran

--cau6
CREATE PROC [dbo].[UPDATE_NGUOIDUNG] @tenDN nvarchar(30), @matK nvarchar(30), @maQ int
as
BEGIN TRAN  	
	UPDATE NGUOIDUNG
	SET MatKhau=@matK, MaQuyen=@maQ
	WHERE TenDangNhap=@tenDN
	If not exists(SELECT * FROM NGUOIDUNG AS ND WHERE ND.TenDangNhap=@tenDN)
		BEGIN
			raiserror('Ten dang nhap khong dung', 0, 1)
			rollback
		END	
COMMIT TRAN	

--QUYENHAN
--cau7
CREATE PROC [dbo].[DELETE_QUYENHAN] @maQ int
as
begin tran 
	if not exists (select * from NGUOIDUNG where MaQuyen=@maQ)
		Begin
			DELETE FROM QUYENHAN WHERE MaQuyen=@maQ
		End
commit tran

--LOAITAILIEU
--cau8
CREATE PROC [dbo].[DELETE_LOAITAILIEU] @maL int
as
begin tran 
	if not exists (select * from TAILIEUDIENTU where MaLoaiTaiLieu=@maL)
		Begin
			DELETE FROM LOAITAILIEU WHERE MaLoaiTaiLieu=@maL
		End
commit tran



